/*! \file
 * \brief Enter a brief description here.
 *
 * Enter a detailed description here. (optional)
 * \author Author (Ivo Wingelaar)
 * \date Date (2011)
 * \version Version (0.0.1)
 * \copyright Copyright (GNU LGPL v3)
 */

#ifndef __LYNX_TIME_MANAGER_WINDOWS_C_HPP_INCLUDED__
#define __LYNX_TIME_MANAGER_WINDOWS_C_HPP_INCLUDED__

#include "LynxTimeManagerStub_C.hpp"

#ifdef _LYNX_WINDOWS_

#include <windows.h>

namespace Lynx
{

/** class                **/
/** TimeManagerWindows_C **/
//! A windows implementation of the TimeManagerStub
class TimeManagerWindows_C : public TimeManagerStub_C
{
public:
    /** default constructor **/
    TimeManagerWindows_C();

    /** default destructor **/
    virtual ~TimeManagerWindows_C();

    /** virtual function **/
    /** init_timer       **/
    //! Initializes the timer.
    /// \return void
    /// \param  void
    virtual void init_timer(void);

    /** const virtual function **/
    /** get_real_time          **/
    //! Returns the real time, depends on implementation.
    /// \return uint32_t
    ///         The real time.
    /// \param  void
    virtual uint32_t get_real_time(void) const;

private:
    //! The frequency of the high resolution clock.
    LARGE_INTEGER mHighPerformanceFreq;
    //! Is a high resolution clock available?
    BOOL mHighPerformanceTimerSupport;
    //! Are there multiple processors in this system?
    BOOL mMultiCore;
};

} // namespace Lynx

#endif // _LYNX_WINDOWS_

#endif // __LYNX_TIME_MANAGER_WINDOWS_C_HPP_INCLUDED__

